package com.zcsy.manage.service.system;


import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.system.RoleUser;
import com.zcsy.manage.model.system.User;
import com.zcsy.manage.model.system.bo.RegisterInfo;


/**
 * @Title: IUserService.java
 * @Package： com.zcsy.shop.service
 * @Description: 用户相关服务层接口类
 * @author tanghan barbadosliy@163.com
 * @Copyright: 2015 武汉中财数元信息技术有限公司 All rights reserved.
 * @date 2015年7月7日
 * @version 1.0
 * @see JDK1.7.0_75
 * @since
 */
public interface IUserService {

    /**
     * 根据ID查询用户信息
     * 
     * @param id
     *            用户主键
     * @return 用户信息
     */
    User selectByPrimaryKey(String id);

    /**
     * 根据ID查询用户信息
     * 
     * @param id
     *            用户登录名
     * @return 用户信息
     */
    User selectByLoginName(String loginname);

    /**
     * 根据主键删除用户信息
     * 
     * @param id
     *            用户主键
     * @return 删除结果
     */
    int deleteByPrimaryKey(String id);

    /**
     * 插入用户信息(字段不为空)
     * 
     * @param record
     *            用户信息
     * @return 插入结果
     */
    int insert(User record);

    /**
     * 根据关键字更新用户信息(字段可为空)
     * 
     * @param record
     *            用户信息
     * @return 更新结果
     */
    int updateByPrimaryKeySelective(User record);

    /**
     * 获取全部的用户列表
     * 
     * @return
     */
    List<User> getAll();

    int updateState(String id, int state);

    /**
     * 判断用户是否存在
     * 
     * @param loginname
     * @return
     */
    boolean selectUserIfExists(String loginname);
    
    /** 
     * @Title: selectUserIfPhoneExists 
     * @Description: 判断用户手机号是否存在
     * @param @param phone 手机号
     * @param @param type 用户类型
     * @param @return     
     * @return List<User>     
     * @throws 
     */
    public List<User> selectUserIfPhoneExists(String phone , int type);

    /**
     * Description: <br> 查询用户信息
     * 
     * @param record
     *            用户对象
     * @return
     * @see
     */
    List<User> queryUser(User record);

    List<User> selectByRoleId(String roleId);

    /**
     * @Description 修改员工密码<br>
     * @param userVo
     *            员工对象
     * @return 执行修改操作的结果
     * @author yangyang yang1192618843@163.com
     * @date 2015年7月20日
     * @see
     */
    int savePassword(User userVo);

    /**
     * @Description 根据登录名和手机号鉴别是否存在某用户<br>
     * @param identification
     *            鉴别信息
     * @return 用户对象
     * @author tanhuatang 786468449@qq.com
     * @date 2015年7月23日
     * @see
     */
    User Identify(String identification);
    
    /**
     * @Description 根据部门主键查询用户集合<br>
     * @param orgId
     *            部门主键
     * @return 用户集合
     * @author yuhaichao yhcjhun@foxmail.com
     * @date 2015年7月27日
     */
    List<User> selectByOrgId(String orgId);

    /**
     * @Description 更新用户的角色
     * @param userId
     *            用户id
     * @param roles
     *            角色数组
     * @author xujl 850789178@qq.com
     * @date 2016年1月19日
     * @see
     */
    void updateRoleUser(String userId, String[] roles);

    /**
     * Description: 根据用户Id查询角色列表
     * 
     * @param userId
     *            用户id
     * @return 角色列表
     * @see
     */
    List<RoleUser> queryRoleByUserId(String userId);
    
    /**
     * @Description 根据用户id和用户类型查询角色列表<br>
     * 
     * @param map userId userType
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年4月21日
     * @see 
     */
    List<RoleUser> queryRoleByUserIdAndUserType(String userId,int userType);
    
    /**
     * @Description 将业主的积分清零<br>
     * 
     * @author liuying 1075817474@qq.com
     * @date 2016年6月7日
     * @see 
     */
    void clearOwnerIntegral();
    
    /** 
     * @Title: userLogin 
     * @Description: 用户登录判断
     * @param @param user 用户登录信息
     * @param @return     
     * @return User     用户信息
     * @throws 
     */
    public User userLogin(User user);
    
    /**
     * @Description 获取最新用户编号<br>
     * 
     * @param userType 用户类型 1：运营 2：物业 3：商户 4：配送 5：业主
     * @return 返回最新编号
     * @author caiyinli 13277030520@163.com
     * @date 2016年6月13日
     * @see 
     */
    String getNewUserNo(int userType);
    
    /** 
     * @Title: selectRoleByUserId 
     * @Description: 取到用户对应的角色
     * @param @param userId
     * @param @return     
     * @return List<String>     
     * @throws 
     */
    List<String> selectRoleByUserId(String userId);

    /**
     * 
     * @Description <取到用户对应的手机号br>
     * 
     * @param phone 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年6月15日
     * @see
     */
	User selectByPhone(String phone);
	
	/**
	 * @Method: selectLoginNameByPhone
	 * @Description 根据手机号查询用户名
	 * @param phone 手机号
	 * @return 用户名
	 * @author liuziyu liuziyuwri@foxmail.com
	 * @date 2016年7月5日
	 * @see 
	 */
	String selectLoginNameByPhone(String phone);
	
    /**
     * @Description 根据用户id取用户的菜单权限<br>
     * 
     * @param userId 用户id
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年6月17日
     * @see 
     */
    List<String> getMenuListByUserId(String userId);
    
    /**
     * 注册用户
     * @Method: registerInfo
     */
    void registerInfo(RegisterInfo info);

    /**
     * @Description 根据订单id查询所对应的店铺帐号<br>
     * 
     * @param orderId 订单id
     * @return 
     * @author yangfan 373188993@qq.com
     * @date 2016年8月22日
     * @see 
     */
    List<String> selectShopUserAccountByOrderId(String id);
    
    /**
	 * @Description:根据手机号和用户类型查询用户，用于注册时判断当前手机号是否已被注册
	 * @param map  phone 注册手机号
	 *             userType 用户类型
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年9月13日
	 */
	User selectUserByPhoneAndUserType(String phone,int userType);

	/**
	 * @Description 查询多个运营公司id是否被用户引用
	 * @param companyIds 多个公司id
	 * @param userType 用户类型
	 * @return 被引用的数目
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月19日
	 * @see 
	 */
	Integer selectCountByCompanyId(String[] companyIds, int userType);

	/**
	 * @Description 更新登录时间和登录次数
	 * @param user 当前用户
	 * @return 1:成功，0：失败
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月21日
	 * @see 
	 */
	Integer updateLoginTimeAndTimes(User user);
}
